package com.example.util;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.example.common.Constants;
import com.example.exception.ServiceException;

import java.util.Date;

public class TokenUtils {

    //    有效时间为1小时
    private static final long OVER_TIME = 60 * 60 * 1000;

    //    密钥
    private static final String SECRET_KEY = "admin123456";


    //    获得令牌，使用用户id和用户密码进行加密
    public static String createToken(String userId) {
        // 获取当前电脑的时间+一小时(过期时间)
        Date date = new Date(System.currentTimeMillis() + OVER_TIME);
        // 密钥加密算法
        Algorithm algorithm = Algorithm.HMAC256(SECRET_KEY);
        // 创建jwt对象
        JWTCreator.Builder builder = JWT.create();
        // 生成签名
        String tokenName = builder.withAudience(userId)
                .withExpiresAt(date)
                .sign(algorithm);
        return tokenName;
    }


    // 传入token,查询当前用户id
    public static String getUserIdByToken(String token) {
        String userId = JWT.decode(token).getAudience().get(0);
        return userId;
    }

    /**
     * 验证 Token 合法性
     *
     * @param token
     */
    public static boolean checkToken(String token) {
        System.out.println(token);
        try {
            JWT.require(Algorithm.HMAC256(SECRET_KEY)).build().verify(token);
        } catch (Exception e) {
            throw new ServiceException(Constants.CODE_500, "令牌过期，请重新登录");
        }
        return true;
    }
}



